home *** CD-ROM | disk | FTP | other *** search
- //---------------------------------------------------
- // NotepadCloneWithFile.cs ⌐ 2001 by Charles Petzold
- //---------------------------------------------------
- using Microsoft.Win32; // Para clases del registro
- using System;
- using System.ComponentModel; // Para clase CancelEventArgs
- using System.Drawing;
- using System.IO;
- using System.Text; // Para clase Encoding
- using System.Windows.Forms;
-
- class NotepadCloneWithFile: NotepadCloneWithRegistry
- {
- // Campos
- protected string strFileName;
- const string strEncoding = "Encoding"; // Para el registro
- const string strFilter =
- "Documentos de texto(*.txt)|*.txt|Todos los archivos(*.*)|*.*";
- MenuItem miEncoding;
- MenuItemEncoding mieChecked;
- // Punto de entrada
- public new static void Main()
- {
- Application.Run(new NotepadCloneWithFile());
- }
- // Constructor
- public NotepadCloneWithFile()
- {
- strProgName = "Clon del Bloc de notas con Archivo";
- MakeCaption();
- Menu = new MainMenu();
-
- // Men· Archivo
-
- MenuItem mi = new MenuItem("&Archivo");
- Menu.MenuItems.Add(mi);
- int index = Menu.MenuItems.Count - 1;
-
- // Archivo Nuevo
-
- mi = new MenuItem("&Nuevo");
- mi.Click += new EventHandler(MenuFileNewOnClick);
- mi.Shortcut = Shortcut.CtrlN;
- Menu.MenuItems[index].MenuItems.Add(mi);
-
- // Archivo Abrir
-
- MenuItem miFileOpen = new MenuItem("&Abrir...");
- miFileOpen.Click += new EventHandler(MenuFileOpenOnClick);
- miFileOpen.Shortcut = Shortcut.CtrlO;
- Menu.MenuItems[index].MenuItems.Add(miFileOpen);
-
- // Archivo Guardar
-
- MenuItem miFileSave = new MenuItem("&Guardar");
- miFileSave.Click += new EventHandler(MenuFileSaveOnClick);
- miFileSave.Shortcut = Shortcut.CtrlS;
- Menu.MenuItems[index].MenuItems.Add(miFileSave);
-
- // Archivo Guardar como
-
- mi = new MenuItem("Guardar co&mo...");
- mi.Click += new EventHandler(MenuFileSaveAsOnClick);
- Menu.MenuItems[index].MenuItems.Add(mi);
-
- // Archivo C≤digo
-
- miEncoding = new MenuItem("C&odificaci≤n");
- Menu.MenuItems[index].MenuItems.Add(miEncoding);
- Menu.MenuItems[index].MenuItems.Add("-");
-
- // Archivo submen· C≤digo
-
- EventHandler eh = new EventHandler(MenuFileEncodingOnClick);
-
- string[] astrEncodings = { "&ASCII", "&Unicode",
- "&Big-Endian Unicode",
- "UTF-&7", "&UTF-&8" };
-
- Encoding[] aenc = { Encoding.ASCII, Encoding.Unicode,
- Encoding.BigEndianUnicode,
- Encoding.UTF7, Encoding.UTF8 };
-
- for (int i = 0; i < astrEncodings.Length; i++)
- {
- MenuItemEncoding mie = new MenuItemEncoding();
- mie.Text = astrEncodings[i];
- mie.Encoding = aenc[i];
- mie.RadioCheck = true;
- mie.Click += eh;
-
- miEncoding.MenuItems.Add(mie);
- }
- mieChecked = (MenuItemEncoding) miEncoding.MenuItems[4]; // UTF-8
- mieChecked.Checked = true;
-
- // Archivo Configurar pßgina
-
- mi = new MenuItem("&Configurar pßgina...");
- mi.Click += new EventHandler(MenuFileSetupOnClick);
- Menu.MenuItems[index].MenuItems.Add(mi);
-
- // Archivo Vista preliminar
-
- mi = new MenuItem("Vista preli&minar...");
- mi.Click += new EventHandler(MenuFilePreviewOnClick);
- Menu.MenuItems[index].MenuItems.Add(mi);
-
- // Archivo Imprimir
-
- mi = new MenuItem("&Imprimir...");
- mi.Click += new EventHandler(MenuFilePrintOnClick);
- mi.Shortcut = Shortcut.CtrlP;
- Menu.MenuItems[index].MenuItems.Add(mi);
- Menu.MenuItems[index].MenuItems.Add("-");
-
- // Archivo Salir
-
- mi = new MenuItem("&Salir");
- mi.Click += new EventHandler(MenuFileExitOnClick);
- Menu.MenuItems[index].MenuItems.Add(mi);
-
- // Definir evento del sistema.
-
- SystemEvents.SessionEnding +=
- new SessionEndingEventHandler(OnSessionEnding);
- }
- // Sobrescritura de eventos
- protected override void OnLoad(EventArgs ea)
- {
- base.OnLoad(ea);
-
- // Tratar con el argumento de la lφnea de cvomandos.
-
- string[] astrArgs = Environment.GetCommandLineArgs();
-
- if (astrArgs.Length > 1) // El primer argumento es el nombre del programa
- {
- if (File.Exists(astrArgs[1]))
- {
- LoadFile(astrArgs[1]);
- }
- else
- {
- DialogResult dr =
- MessageBox.Show("No se encuentra el archivo " +
- Path.GetFileName(astrArgs[1]) +
- ".\r\n\r\n" +
- "┐Desea crear uno nuevo?",
- strProgName,
- MessageBoxButtons.YesNoCancel,
- MessageBoxIcon.Question);
- switch(dr)
- {
- case DialogResult.Yes: // Crear y cerrar el archivo.
- File.Create(strFileName = astrArgs[1]).Close();
- MakeCaption();
- break;
-
- case DialogResult.No:
- break;
-
- case DialogResult.Cancel:
- Close();
- break;
- }
- }
- }
- }
- protected override void OnClosing(CancelEventArgs cea)
- {
- base.OnClosing(cea);
-
- cea.Cancel = !OkToTrash();
- }
- // Manejadores de evento
- void OnSessionEnding(object obj, SessionEndingEventArgs seea)
- {
- seea.Cancel = !OkToTrash();
- }
- // Elementos de men·
- void MenuFileNewOnClick(object obj, EventArgs ea)
- {
- if (!OkToTrash())
- return;
-
- txtbox.Clear();
- txtbox.ClearUndo();
- txtbox.Modified = false;
-
- strFileName = null;
- MakeCaption();
- }
- void MenuFileOpenOnClick(object obj, EventArgs ea)
- {
- if (!OkToTrash())
- return;
-
- OpenFileDialog ofd = new OpenFileDialog();
- ofd.Filter = strFilter;
- ofd.FileName = "*.txt";
-
- if (ofd.ShowDialog() == DialogResult.OK)
- LoadFile(ofd.FileName);
- }
- void MenuFileEncodingOnClick(object obj, EventArgs ea)
- {
- mieChecked.Checked = false;
- mieChecked = (MenuItemEncoding) obj;
- mieChecked.Checked = true;
- }
- void MenuFileSaveOnClick(object obj, EventArgs ea)
- {
- if (strFileName == null || strFileName.Length == 0)
- SaveFileDlg();
- else
- SaveFile();
- }
- void MenuFileSaveAsOnClick(object obj, EventArgs ea)
- {
- SaveFileDlg();
- }
- protected virtual void MenuFileSetupOnClick(object obj, EventArgs ea)
- {
- MessageBox.Show("Configurar pßgina todavφa no estß implementada!", strProgName);
- }
- protected virtual void MenuFilePreviewOnClick(object obj, EventArgs ea)
- {
- MessageBox.Show("Vista preliminar todavφa no estß implementada!", strProgName);
- }
- protected virtual void MenuFilePrintOnClick(object obj, EventArgs ea)
- {
- MessageBox.Show("Imprimir todavφa no estß implementada!", strProgName);
- }
- void MenuFileExitOnClick(object obj, EventArgs ea)
- {
- if (OkToTrash())
- Application.Exit();
- }
- // Sobrescritura de mΘtodos
- protected override void LoadRegistryInfo(RegistryKey regkey)
- {
- base.LoadRegistryInfo(regkey);
-
- // Definir codificaci≤n.
-
- int index = (int) regkey.GetValue(strEncoding, 4);
-
- mieChecked.Checked = false;
- mieChecked = (MenuItemEncoding) miEncoding.MenuItems[index];
- mieChecked.Checked = true;
-
- }
- protected override void SaveRegistryInfo(RegistryKey regkey)
- {
- base.SaveRegistryInfo(regkey);
- regkey.SetValue(strEncoding, mieChecked.Index);
- }
- // Rutinas de utilidad
- protected void LoadFile(string strFileName)
- {
- StreamReader sr;
-
- try
- {
- sr = new StreamReader(strFileName);
- }
- catch (Exception exc)
- {
- MessageBox.Show(exc.Message, strProgName,
- MessageBoxButtons.OK,
- MessageBoxIcon.Asterisk);
- return;
- }
- txtbox.Text = sr.ReadToEnd();
- sr.Close();
-
- this.strFileName = strFileName;
- MakeCaption();
-
- txtbox.SelectionStart = 0;
- txtbox.SelectionLength = 0;
- txtbox.Modified = false;
- txtbox.ClearUndo();
- }
- void SaveFile()
- {
- try
- {
- StreamWriter sw = new StreamWriter(strFileName, false,
- mieChecked.Encoding);
- sw.Write(txtbox.Text);
- sw.Close();
- }
- catch (Exception exc)
- {
- MessageBox.Show(exc.Message, strProgName,
- MessageBoxButtons.OK,
- MessageBoxIcon.Asterisk);
- return;
- }
- txtbox.Modified = false;
- }
- bool SaveFileDlg()
- {
- SaveFileDialog sfd = new SaveFileDialog();
-
- if (strFileName != null && strFileName.Length > 1)
- sfd.FileName = strFileName;
- else
- sfd.FileName = "*.txt";
-
- sfd.Filter = strFilter;
-
- if (sfd.ShowDialog() == DialogResult.OK)
- {
- strFileName = sfd.FileName;
- SaveFile();
- MakeCaption();
- return true;
- }
- else
- {
- return false; // Valores de retorno son para OkToTrash.
- }
- }
- protected void MakeCaption()
- {
- Text = strProgName + " - " + FileTitle();
- }
- protected string FileTitle()
- {
- return (strFileName != null && strFileName.Length > 1) ?
- Path.GetFileName(strFileName) : "Sin tφtulo";
- }
- protected bool OkToTrash()
- {
- if (!txtbox.Modified)
- return true;
-
- DialogResult dr =
- MessageBox.Show("El texto en el archivo " + FileTitle() +
- " ha cambiado.\r\n\r\n" +
- "┐Desea guardar los cambios?",
- strProgName,
- MessageBoxButtons.YesNoCancel,
- MessageBoxIcon.Exclamation);
- switch (dr)
- {
- case DialogResult.Yes:
- return SaveFileDlg();
-
- case DialogResult.No:
- return true;
-
- case DialogResult.Cancel:
- return false;
- }
- return false;
- }
- }
- class MenuItemEncoding: MenuItem
- {
- public Encoding Encoding;
- }